package PruebasUnitarias;

import junit.framework.TestCase;
import Modelo.*;

public class PlatilloVoladorTest extends TestCase {
	private Bloque[][] bloques;
	private Mapa mapa;
	
	protected void setUp() throws Exception {
		super.setUp();
		mapa= new Mapa(); 
		bloques= new Bloque[12][3];
		
		for(int i=0;i<12;i++)
			for(int j=0;j<3;j++)
				if(i<10)
					bloques[i][j]= new Vacio(mapa);
				else
					bloques[i][j]= new Roca(mapa);
		mapa.inicializarMapa(bloques);
	}
	
	public void testEsEjecutableSobre(){
		PoseedorDeHabilidad pooglin = new Pooglin(mapa);
		Habilidad platilloVolador=new PlatilloVolador();
		pooglin.asignarHabilidad(platilloVolador);
		pooglin.caminar();
		assertFalse(platilloVolador.esEjecutableSobre(pooglin));
		pooglin.caer();
		assertTrue(platilloVolador.esEjecutableSobre(pooglin));
	}
	
	public void testEjecutarSobre(){
		PoseedorDeHabilidad pooglin = new Pooglin(mapa);
		Habilidad platilloVolador=new PlatilloVolador();
		Habilidad caida=new Caida();
		
		// sin platillo muere
		bloques[0][1].alojar(pooglin);
		while(caida.esEjecutableSobre(pooglin)){
			caida.ejecutarSobre(pooglin);
		}
		assertFalse(pooglin.estaVivo());
		assertTrue(bloques[9][1].estaAlojado(pooglin));
		
		// con platillo no muere
		PoseedorDeHabilidad pooglin2 = new Pooglin(mapa);
		pooglin2.asignarHabilidad(platilloVolador);
		bloques[1][1].alojar(pooglin2);
		while(caida.esEjecutableSobre(pooglin2)){
			caida.ejecutarSobre(pooglin2);
			platilloVolador.ejecutarSobre(pooglin2);
		}
		assertTrue(pooglin2.estaVivo());
	}
}
